数据类型与输入
基础数据类型
C++ 常用的基本数据类型主要有以下几种:
数据类型 | 描述 | 示例 |
---|---|---|
整形 int | 所有的整数 | int num = 1; |
实数型 double | 所有的小数 | double num = 1.5; |
单字符 char | 单一字符 | char character = 'a'; |
字符串 string | 两个及以上字符 | string word = "Hello"; |
布尔 bool | true 或者 false | bool judge = true; |
cpp
#include <iostream>
using namespace std;
int main() {
int num1 = 1;
double num2 = 1.5;
char character = 'a';
bool judge = true;
string word = "Hello";
cout << num1 << endl;
return 0;
}
标准输入输出
C++语言的标准输入与输出使用的是 cin 和 cout。
cin 是从键盘上读取用户输入的内容。
cout 是输出相应的内容,endl 是换行的意思。
试试以下程序,输入两个数字,然后输出它们的和。(记得现在 stdin 里输入两个数字,以空格隔开或者换行隔开)
cpp
#include <iostream>
using namespace std;
int main() {
int num1,num2;
cin >> num1 >> num2;
cout << num1 + num2 << endl;
return 0;
}
数据类型很重要,如果声明的是string类型的变量,再输入两个数字,然后输出它们的和看看。(**记得现在stdin里输入两个数字**)
```cpp
#include <iostream>
using namespace std;
int main() {
string num1,num2;
cin >> num1 >> num2;
cout << num1 + num2 << endl;
return 0;
}
区别
可以看到,int 类型的变量相加就是数学加法,比如 1+2,会得到 3。但是 string 类型的变量相加就是字符拼接,比如'1'+'2',会得到'12',而不是 3。所以声明合适的数据类型非常重要。
拓展内容
后续为拓展内容
占用内存与范围
类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占 4 个字节(32 位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占 8 个字节(64 位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128 位)内存空间,可提供 18-19 位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
类型转换
强制转换
强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:
(type_name) expression
请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("mean的值是: %f", mean );
return 0;
}
隐式转换
常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a = 1;
double b = 1.2;
cout<<a + b<<endl; //int类型会自动转换为double类型,算出来是2.2
cout<<a + (int)b<<endl; //强制转换b为int类型后,才能得到2
}
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
char ch = 'a'; // a 的 ASCII 值是 97
int sum;
sum = 'a' + ch; // 字符相加会自动转换为整数
if(ch < 98) // char 可以直接和整数比较
printf("sum的值是: %d\\n", sum );
printf("变量ch的字母往右移动3位: %c", ch + 3);
}
字符串转换
字符串与数字的相互转换
可以使用 to_string()函数,实现数字转字符串。
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a = 1;
float b = 1.2;
string c = to_string(a) + to_string(b);
cout<<c<<endl;
}
可以使用 stoi()函数,实现字符串转整数。stod()函数,实现字符串转浮点数。
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a = "1";
int b = stoi(a) + stoi(a);
cout<<b<<endl;
string c = "1.2";
double d = stod(c) + stod(c);
cout<<d<<endl;
}
typedef 自定义数据类型
typedef 是 C 编程中使用的关键字,用于为 C 程序中已经存在的变量提供一些有意义的名称。它的行为类似于我们为命令定义别名。简而言之,我们可以说这个关键字用于重新定义一个已经存在的变量的名称。
cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll num = 1E10;
cout<<num<<endl;
}
auto 类型
有时候,可以使用 auto 关键字来自动声明类型。
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int nums[3] = {1,2,3};
for(auto i : nums)
cout<<i<<endl;
}